package data;

/**
 * This class will serve as a "constants" holder
 * @author Julien
 *
 */
public class Data {
	/** Current list of races supported */
	public enum Race  
	{ 
		HUMAN (0), 
		ORC (1), 
		ELF (2), 
		UNKNOWN (-1);
		
		// the joys of coding in java...
		private final int m_value; 
		
		private Race(int value) { m_value = value; }
		
		public int value() { return m_value; }
	};

	/** List of roles supported */
	public enum Role { 
		BLITZER(0), 
		CATCHER(1), 
		THROWER(2), 
		LINEMAN(3), 
		BLOCKER(4), 
		UNKNOWN(-1);
		
		private final int m_value;
		
		private Role(int value) { m_value = value; }
		
		public int value() { return m_value; }
	};

	/** List of skills: string representation should be found in the save/load methods.
	 *  Current list contains likely skills that will need to be implemented.
	 */
	public enum Skill { BLOCK, CATCH, DODGE, NERVES_OF_STEEL, SIDE_STEP, SURE_HANDS, PASS };
	
	/** Holds the Id of the team on the field. */
	public enum TeamID 
	{ 
		TEAM_A(1), 
		TEAM_B(2);
		
		private final int m_value;
		
		private TeamID(int value) { m_value = value; }
		
		public int value() { return m_value; }
		
		public TeamID other() {
			return this.equals(TEAM_A) ? TEAM_B : TEAM_A;
		}
	};
	
	/**
	 * Enumeration of the states a player can be in during a match.
	 */
	public enum PlayerState {
		NONE,
		IN_DUGOUT,
		IN_PLAY,
		PRONE,
		STUNNED,
		KO,
		INJURED,
		DEAD
	}
	
	/**
	 * Enumerates the possible actions performed by a player on the field.
	 */
	public enum ActionType
	{
		NONE,
		MOVE,
		THROW,
		BLOCK,
		STAND,
		BLITZ		
		// TODO: fill this up with all the actions that we support
	}
	
	/**
	 * Enumerates the faces of the block dice.
	 */
	public enum BlockActionType
	{
		ATTACKER_DOWN,
		BOTH_DOWN,
		PUSHED,
		DEFENDER_STUMBLES,
		DEFENDER_DOWN
	}
	
	public enum Zones
	{
		LEFT_PITCH,
		RIGHT_PITCH,
		TOP_WIDE,
		BOTTOM_WIDE,
		LEFT_ENDZONE,
		RIGHT_ENDZONE,
		SCRIMMAGE_LINE,
		LEFT_SCRIMMAGE,
		RIGHT_SCRIMMAGE
	}
	
	public enum Direction
	{
		NW,
		N,
		NE,
		W,
		E,
		SW,
		S,
		SE
	}
}
